#!/bin/bash

# 设置变量
OUTPUT_DIR="analysis_$(date +%Y%m%d_%H%M%S)"
SERVER_ADDR="localhost:8080"
DURATION=30

# 创建输出目录
mkdir -p "$OUTPUT_DIR"
cd "$OUTPUT_DIR"

# 1. 收集性能数据
echo "收集性能数据..."

# CPU性能分析
curl -s "http://$SERVER_ADDR/debug/pprof/profile?seconds=$DURATION" > cpu.pprof &
CPU_PID=$!

# 内存分析
curl -s "http://$SERVER_ADDR/debug/pprof/heap" > heap.pprof &
MEM_PID=$!

# Goroutine分析
curl -s "http://$SERVER_ADDR/debug/pprof/goroutine" > goroutine.pprof &
GOROUTINE_PID=$!

# 等待所有分析完成
wait $CPU_PID $MEM_PID $GOROUTINE_PID

# 2. 收集系统信息
echo "收集系统信息..."

# CPU使用率
top -bn1 | grep "Cpu(s)" > cpu_usage.txt

# 内存使用情况
free -m > memory_usage.txt

# 磁盘使用情况
df -h > disk_usage.txt

# 网络连接
netstat -an | grep ESTABLISHED | wc -l > connections.txt

# 3. 分析日志
echo "分析日志..."
go run ../cmd/analyze/main.go \
    -log ../logs/app.log \
    -cpu cpu.pprof \
    -mem heap.pprof \
    -server "$SERVER_ADDR" \
    > analysis_report.txt

# 4. 生成火焰图
echo "生成火焰图..."
go tool pprof -svg cpu.pprof > cpu_flame.svg
go tool pprof -svg heap.pprof > heap_flame.svg

# 5. 生成汇总报告
echo "生成汇总报告..."
cat > summary.md << EOF
# 性能分析汇总报告

## 基本信息
- 分析时间: $(date '+%Y-%m-%d %H:%M:%S')
- 服务器地址: $SERVER_ADDR
- 分析持续时间: ${DURATION}秒

## 系统状态
### CPU使用率
\`\`\`
$(cat cpu_usage.txt)
\`\`\`

### 内存使用情况
\`\`\`
$(cat memory_usage.txt)
\`\`\`

### 磁盘使用情况
\`\`\`
$(cat disk_usage.txt)
\`\`\`

### 网络连接数
\`\`\`
$(cat connections.txt)
\`\`\`

## 详细分析
详细分析结果请查看 analysis_report.txt

## 性能分析图
- CPU火焰图: cpu_flame.svg
- 内存火焰图: heap_flame.svg
- Goroutine分析: goroutine.pprof

## 建议
1. 查看 CPU 火焰图，找出 CPU 使用率高的函数
2. 检查内存火焰图，发现可能的内存泄漏
3. 分析 Goroutine 数量，检查是否有 Goroutine 泄漏
4. 根据日志分析报告，优化响应时间较长的接口
EOF

echo "分析完成！"
echo "报告目录: $OUTPUT_DIR"
echo "请查看 summary.md 获取完整报告" 